package com.qfedu.edu.messagecenterserver.mqtt.observer.impl;

import com.alibaba.fastjson2.JSON;
import com.qfedu.edu.bo.HardwareMessageBo;
import com.qfedu.edu.constance.RedisConstance;
import com.qfedu.edu.manager.RedisManager;
import com.qfedu.edu.mqtt.data.MessagePayload;
import com.qfedu.edu.mqtt.data.MqttMessage;
import com.qfedu.edu.messagecenterserver.mqtt.observer.base.Observer;
import lombok.extern.slf4j.Slf4j;
import org.joda.time.DateTime;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

/**
 * @author xiaobobo
 * @title: HeartInfoHandlerObserver
 * @projectName cd-fy-2401-third-project-parent
 * @description: 心跳信息处理的观察者
 * 心跳信号维护的目的是说明这个硬件还活着  如果没有活着 那么还要剔除
 * @date 2024/10/9  17:34
 */
@Component
@Slf4j
public class HeartInfoHandlerObserver implements Observer {

    @Autowired
    private RedisManager redisManager;

    @Override
    public void notifyHandler(MqttMessage mqttMessage) {
        log.info("心跳信号正在维护....");
        /**
         * 心跳信号我们是直接维护到 Redis中
         * 直接采用Hash结构来存储
         * 集合的名字   heart:info   设备key    当前时间
         */
        //首先取出这个载荷信息
        MessagePayload messagePayload = mqttMessage.getMessagePayload();
        //这个消息就是实际的硬件信息
        String payload = messagePayload.getPayload();
        //转换上述的消息为对象
        HardwareMessageBo hardwareMessageBo = JSON.parseObject(payload, HardwareMessageBo.class);
        //于是就可以取出这个设备key了
        String device = hardwareMessageBo.getDevice();
        //接下来我们就可以进行续约了
        redisManager.addHash(RedisConstance.getHeartInfoHashName(),device, DateTime.now().getMillis());
        log.info("本轮心跳信号续约完成....");
    }
}
